﻿package com.zouloux.core.navigation 
{
	import com.zouloux.core.events.NavigationEvent;
	import com.zouloux.core.IDisposable;
	import flash.external.ExternalInterface;
	/**
	 * ...
	 * @author ZoulouX
	 */
	public class GATracker implements IDisposable
	{
		/**
		 * Le nom du tracker JavaScript
		 */
		protected var _trackerName				:String				= "pageTracker";
		
		/**
		 * Le préfixe pour le nom des pages
		 */
		protected var _pagePrefix				:String				= "/#/";
		
		/**
		 * Le bootstrap à écouter
		 */
		protected var _bootstrap				:Bootstrap;
		
		
		/**
		 * Le nom du tracker JavaScript
		 */
		public function get trackerName ():String { return _trackerName; }
		public function set trackerName (value:String):void 
		{
			_trackerName = value;
		}
		
		/**
		 * Le préfixe à ajouter sur toutes les URL
		 */
		public function get pagePrefix ():String { return _pagePrefix; }
		public function set pagePrefix (value:String):void 
		{
			_pagePrefix = value;
		}
		
		/**
		 * Le bootstrap à écouter
		 */
		public function get bootstrap ():Bootstrap { return _bootstrap; }
		public function set bootstrap (value:Bootstrap):void 
		{
			// S'il y a un ancien bootstrap, on n'écoute plus ses changements
			if (_bootstrap != null)
				_bootstrap.removeEventListener(NavigationEvent.PAGE_CHANGE, pageChangeHandler);
			
			// On enregistre le nouveau
			_bootstrap = value;
			
			// Et on écoute les changements de page
			_bootstrap.addEventListener(NavigationEvent.PAGE_CHANGE, pageChangeHandler);
		}
		
		
		/**
		 * Le GATracker permettra de tracker les pages Flash
		 * avec Google Analytics Javascript
		 * Attention, l'ExternalInterface Javascript doit être activée
		 */
		public function GATracker ()
		{
			
		}
		
		/**
		 * Le bootstrap change de page
		 * @param	event
		 */
		protected function pageChangeHandler (event:NavigationEvent):void 
		{
			trackPage(_bootstrap.url);
		}
		
		/**
		 * Tracker une page en particulier.
		 * @param	pPage : L'adresse de la page au format String
		 */
		public function trackPage (pPage:String):void
		{
			// Appeler la fonction Javascript
			ExternalInterface.call(_trackerName."._trackPageview", _pagePrefix+pPage);
		}
		
		/**
		 * Dispose
		 */
		public function dispose ():void
		{
			if (_bootstrap != null)
			{
				_bootstrap.removeEventListener(NavigationEvent.PAGE_CHANGE, pageChangeHandler)
				_bootstrap = null;
			}
		}
	}
}